![Fish ShellのFunctionを試してみた](https://images.ctfassets.net/ct0aopd36mqt/1dD7b8HkT2sbiJzUIewMTD/e5cdc6f33c4fdd9d798f11a4564612ff/eyecatch_developersio_darktone_1200x630.jpg)
Fish ShellのFunctionを試してみた
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
最近remind101/assume-roleというツールをMac環境に設定したのですが、その際にfunctionの設定でちょっと困りました。
assume-role
コマンドを実行時に、eval
でAWS_ACCESS_KEY_ID
などを設定しておきたい場合には、assume-role/README.mdにもある通り、以下のように設定しておくと便利です。
alias assume-role='function(){eval $(command assume-role $@);}'
function assume-role { eval $( $(which assume-role) $@); }
一方わたしはMac環境のシェルにFish Shellを利用しているので、~/.config/fish/config.fish
に上記設定をしようとしてみたのですが、エラーとなり設定できませんでした。
調べてみると、Fish ShellにはFunctionというものがあり、どうもこれを使ったほうが良さそうなので設定してみました。
Autoloading functions
シェル起動後に利用できるようにするには、FunctionをAutoloading functionsとして設定すると良いようです。
Functionは~/.config/fish/functions
ディレクトリの配下にfunction-name.fishとしてファイルを配置すれば良いようなので、今回は~/.config/fish/functions/assume-role.fish
とうファイルを作成します。
Functionの定義
今回、Functionは以下のように作成しました。
# remind101/assume-role function assume-role eval (/usr/local/bin/assume-role $argv); end
なお、元々設定したかったのは下記なので、assume-role
コマンドの絶対パスは自動で取得するのが良いのですが、which
を組み合わせた場合にうまく動かせなかったのでちょっとお茶を濁しています。
function assume-role { eval $( $(which assume-role) $@); }
実際に以下のようにシェルを起動し直してコマンドを実行すると、想定どおりに動かすことができました!
# fishのfunctionで、assume-role時にevalまで実行 $ assume-role foo MFA code: 123456 # evalがちゃんと動いているか確認 $ env | grep ASSUMED_ROLE ASSUMED_ROLE=foo
まとめ
以上、Fish ShellのFunctionを試してみました。大体はaliasで事が済んでしまうので、いままでは使ったことがなかったのですが、Functionは色々と使い所がありそうなので覚えておきたいと思います。
どなたかのお役に立てば幸いです。それでは!